/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.servicoimpl;

import br.com.deployment.entity.orcamento.OrcamentoAto;
import br.com.deployment.entity.orcamento.Orcamento;
import br.com.deployment.entity.orcamento.OrcamentoCampo;
import br.com.deployment.interfaces.OrcamentoAtoDaoIn;
import br.com.deployment.servico.OrcamentoAtoServico;
import br.com.deployment.servico.OrcamentoServico;
import br.com.deployment.utilitario.Msg;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.EJBAccessException;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;

/**
 *
 * @author luciano
 */
@Stateless
@LocalBean
public class OrcamentoAtoServicoImpl implements OrcamentoAtoServico{

    @EJB
    OrcamentoAtoDaoIn orcamentoAtoDao;
    
    @EJB
    OrcamentoServico orcamentoServico;

    
    @Override
    public void salvar(OrcamentoAto o) {
        try {
            orcamentoAtoDao.save(o);
        }catch(EJBAccessException accessException){
            Msg.messagemError("Erro no EJB");
        }catch (Exception e) {
            Msg.messagemError("Erro");
        }
    }

    @Override
    public void remover(OrcamentoAto o) {
        try {
            orcamentoAtoDao.delete(o);   
        }catch(EJBAccessException accessException){
            Msg.messagemError("Erro no EJB");
        }catch (Exception e) {
            Msg.messagemError("Erro");
        }
    }

    @Override
    public void atualizar(OrcamentoAto o) {
        try {
            orcamentoAtoDao.update(o);
        }catch(EJBAccessException accessException){
            Msg.messagemError("Erro no EJB");
        }catch (Exception e) {
            Msg.messagemError("Erro");
        }
    }

    @Override
    public List<OrcamentoAto> orcamentos() {
        try {
          return orcamentoAtoDao.findAll();   
        }catch(EJBAccessException accessException){
            Msg.messagemError("Erro no EJB");
        }catch (Exception e) {
            Msg.messagemError("Erro");
        }
        return null;
    }
    
    @Override
    public List<OrcamentoAto> getOrcamento(Orcamento orc){
        List<OrcamentoAto> lst = new ArrayList<OrcamentoAto>();        
        try{
            lst = orcamentoAtoDao.buscarOrcamentoAto(orc);
            return lst;
        }catch(NullPointerException ne){
            return lst;
        }
    }
    
    @Override
    public List<OrcamentoAto> resgatarOrc(Orcamento orc){
        List<OrcamentoAto> lst = new ArrayList<OrcamentoAto>();

        if(orc.getValidade().after(new Date())){
            lst = orcamentoAtoDao.buscarOrcamentoAto(orc);
        }else{
            lst = resgatar(orcamentoAtoDao.buscarOrcamentoAto(orc));
        }
        return lst;
     }
    
    public List<OrcamentoAto> resgatar(List<OrcamentoAto> lst){
        
        for (OrcamentoAto orcamentoAto : lst) {
            if(!orcamentoAto.getOrcamentoCampos().isEmpty()){
                for ( OrcamentoCampo campos : orcamentoAto.getOrcamentoCampos()) {
                    if(campos.getAtoCampo().getCalc()){                    
                            orcamentoAto.setValor(orcamentoServico.valorAto(orcamentoAto.getAtoItem(), format(campos)));
                    }
                }
            }else{
                BigDecimal zero = BigDecimal.ZERO;
                orcamentoAto.setValor(orcamentoServico.valorAto(orcamentoAto.getAtoItem(), zero));
            }
        }
        return lst;
    }
    
     private BigDecimal format(OrcamentoCampo oc) {
        
            if ((oc.getAtoCampo().getCalc()) && (oc.getAtoCampo().getTipo().equalsIgnoreCase("Double"))) {
                
                if (oc.getAtoCampo().getCalc()) {
                    oc.setValor(oc.getValor().replace(".", "").replaceAll( "," , "." ));
                    BigDecimal val = new BigDecimal(oc.getValor());
                    return val;
                }
            }
        
        return null;
    }
 
}
